<?php
/**
 * 服务接口
 * 
 * @author ShuangYa
 * @package APIGateway
 * @category Interface
 * @link https://www.sylingd.com/
 * @copyright Copyright (c) 2018 ShuangYa
 * @license https://www.sylibs.com/go/apigateway/license
 */
namespace ag\library;

interface ServiceInterface {
	/**
	 * 获取所有可调用的接口
	 * 用于后台管理权限
	 * 
	 * @access public
	 * @return array
	 */
	public static function getMethods(): array;
	/**
	 * 判断$name是否为一个可调用的接口
	 * 
	 * @access public
	 * @param string $name
	 * @return boolean
	 */
	public static function exists(string $name): bool;
	/**
	 * 调用接口
	 * 调用成功则返回Google\Protobuf\Internal\Message
	 * 调用失败则返回非Object
	 * 
	 * @access public
	 * @param array $server
	 * @param string $server[address] 服务器地址
	 * @param string $server[port] 服务器端口
	 * @param string $name 接口名称
	 * @param Message $data 数据，基类为Google\Protobuf\Internal\Message
	 * @return mixed
	 */
	public static function call(array $server, string $name, $data);
	/**
	 * 获取某台服务器的状态，返回负载或-1（不可用）
	 * 
	 * @access public
	 * @param array $server
	 * @return int
	 */
	public static function getStatus(array $server): int;
}